Postmanでのテストの書き方

Postmanでのテストの書き方

Postmanでテストを書く方法を紹介します。
Clock Icon2024.08.27

SBJソリューション部のserinaです。

先日、Postmanでテストを書く機会があったのでやったことをまとめたいと思います。

Postmanとは

Postmanは、API(アプリケーションプログラミングインターフェース)の開発、テスト、デバッグを効率的に行うためのツールです。

https://www.postman.com/home

ちなみにPostmanの日本法人設立は、2023年12月5日です。
結構最近なことに驚きました。
設定言語に日本語が設定できるようになったのもこの頃らしいので、今は昔に比べると日本語で使える機能が充実していそうです。

テストを書く場所

Scriptに書いていきます。

postman-script

テストの実行方法

  • Run collection
  • Run folder
  • リクエストを開いて、Sendボタンをクリック
  • Monitor (モニター機能)
  • Newman (コマンドライン)

MonitorとNewmanは使用したことがないですが、全部で5つほど実行方法があります。

テストの書き方

使用できるjsライブラリ

https://learning.postman.com/docs/tests-and-scripts/write-scripts/postman-sandbox-api-reference/#using-external-libraries

こちらのページに記載されています。

crypto-jsは使えるが、Cryptoは使用できなかったり、使用できるライブラリは限られています。

認証のセット方法

認証のセット方法は、いくつかあります。
ここでは私が実装したことのある2種類のみ紹介します。

1. CollectionのAuthorizationで設定

まず1つ目は、CollectionのAuthorizationで設定できます。
また、設定したトークンは、APIのAuthorizationで Inherit auth from parent を選択して使用します。

postman-authorization

2. アクセストークン取得用のリクエストを作成して環境変数にセット

もう1つの方法は、アクセストークン取得用のリクエストを作成して環境変数にセットする方法です。

postman-set-access-token

POST {{base_url}}/oauth/token
// Scripts > Post-res
pm.test('response is ok', function () {
    pm.response.to.have.status(200);
    pm.response.to.have.jsonBody('access_token');
});

pm.environment.set('_access_token', pm.response.json().access_token);

このようにしてセットします。
使用する際は、AthorizationのAuth Typeで Bearer Tokenを選択肢、環境変数をセットします。

postman-bearer-token

環境変数は、Environmentsで設定できます。

postman-environments

schema構造をテストする

OpenAPIを使用している場合は、そのschemaをほとんどそのまま使用することができます。

pm.test("Validate response schema", () => {
    // Ajvインスタンスの作成
    const Ajv = require('ajv');
    const ajv = new Ajv({ allErrors: true, format: 'full' });

    // スキーマの定義
    const schema = {
        "type": "object",
        "properties": {
            "id": { "type": "integer" },
            "name": { "type": "string" },
            "email": { "type": "string", "format": "email" },
            "age": { "type": "integer", "minimum": 0 }
        },
        "required": ["id", "name", "email", "age"]
    };

    // レスポンスのバリデーション
    const valid = ajv.validate(schema, pm.response.json());
    if (!valid) {
        console.log(ajv.errors);
    }
    pm.expect(valid, JSON.stringify(ajv.errors)).to.be.true;
});

注意点として、nullが返却される場合にtypeをintegerのみにしておくとエラーになります。

"type": ["integer", "null"]

と書かないとテストは成功しません。

Postman用のschemaをOpenAPIから生成する方法がないかについては、調べてみてるのですが良い方法が見つけられてないです。。。
見つかったらまた記事書きます。

見つかったらまた記事書きます。

Scriptsで別のテストを呼ぶ

setNextRequest を使用するとScriptsからAPIを呼びことができます。

pm.execution.setNextRequest(pm.info.requestId);

この場合は、pm.info.requestId で自身のAPIのrequestIdを取得して再帰しています。
429エラーのテストでn回目に429になることをテストしたい場合などに使用できるかと思います。

また、テストに書くほどでもなければRun collectionやRun folder実行の際にIterationsを設定することで同様のことができます。

postman-run-collection

最後に

Postmanでしっかりとしたテストを書くのは初めてでしたが、作成しておけば動作確認やテストが容易になるのでとても良いなと思いました!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.